// src/utils/showDialog.js
import { createVNode, render } from 'vue'
import Dialog from '@/components/common/Dialog.vue'

let currentInstance = null
let container = null

export const showDialog = (options = {}) => {
  // 1. 销毁上一个弹窗（防止重复）
  if (currentInstance) {
    render(null, container)
    container.remove()
    currentInstance = null
    container = null
  }

  // 2. 创建容器
  container = document.createElement('div')
  container.className = 'global-dialog-container'
  document.body.appendChild(container)

  // 3. 创建 VNode（传入 props）
  const vnode = createVNode(Dialog, {
    title: options.title || '提示',
    message: options.message || '', // 允许为空，但建议传
    onConfirm: () => {
      options.onConfirm?.()
      closeDialog()
    },
    onCancel: () => {
      options.onCancel?.()
      closeDialog()
    }
  })

  // 4. 渲染到容器
  render(vnode, container)
  currentInstance = vnode.component

  // 5. 触发显示（通过组件内部的 show 方法）
  setTimeout(() => {
    currentInstance.exposed?.show?.()
  }, 0)

  // 提供关闭方法
  const closeDialog = () => {
    if (currentInstance) {
      currentInstance.exposed?.close?.()
      // 延迟卸载，等动画结束（可选）
      setTimeout(() => {
        if (container && container.parentNode) {
          render(null, container) // 卸载组件
          container.remove()
        }
        currentInstance = null
        container = null
      }, 300)
    }
  }

  return { close: closeDialog }
}